﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Transactions;
using SMA.GENTEv1.Dados;


namespace SMA.GENTEv1
{
    public class PessoaDocumentoPadrao
    {
        #region Variaveis Membro
        private int _idDocumento;
        private Pessoa _pessoa;
        private TipoDocumentoPessoa _tipoDocumentoPessoa;
        private string _path;
        private GENTEEntities _context;
        #endregion

        #region Parametro
        public int IdDocumento
        {
            get { return _idDocumento; }
            set { _idDocumento = value; }
        }

        public string Path
        {
            get { return _path; }
            set { _path = value; }
        }

        public Pessoa Pessoa
        {
            get { return this._pessoa; }
            set { this._pessoa = value; }
        }

        public TipoDocumentoPessoa TipoDocumentoPessoa
        {
            get { return this._tipoDocumentoPessoa; }
            set { this._tipoDocumentoPessoa = value; }
        }
        #endregion

        #region Construtores
        public PessoaDocumentoPadrao()
        {
            _context = new GENTEEntities();
        }
        #endregion

        #region Métodos Públicos
        public List<PessoaDocumentoPadrao> BuscarDocumentosDeficiencia(int pIdPessoa)
        {
            try
            {
                List<PessoaDocumentoPadrao> listDocumentosDeficiencia = new List<PessoaDocumentoPadrao>();

                var consulta = from pessoadocpadrao in _context.tab_pessoa_documento_padrao
                               where (pessoadocpadrao.tab_pessoa.Id_pessoa == pIdPessoa)
                               && (pessoadocpadrao.tab_tipo_documento_pessoa.id_tipo_documento_pessoa == (int)TipoDocumentoPessoa.TipoDocumento.DeficienciaFisica)
                               select new
                               {
                                   pessoadocpadrao.id_documento,
                                   pessoadocpadrao.tab_pessoa.Id_pessoa,
                                   pessoadocpadrao.tab_tipo_documento_pessoa.id_tipo_documento_pessoa,
                                   pessoadocpadrao.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    PessoaDocumentoPadrao pessoadocpadrao = new PessoaDocumentoPadrao();
                    pessoadocpadrao.IdDocumento = list.id_documento;
                    pessoadocpadrao.Pessoa = new Pessoa(list.Id_pessoa);
                    pessoadocpadrao.TipoDocumentoPessoa = new TipoDocumentoPessoa(list.id_tipo_documento_pessoa);
                    pessoadocpadrao.Path = list.path;

                    listDocumentosDeficiencia.Add(pessoadocpadrao);
                }

                return listDocumentosDeficiencia;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public int RetornaQtdeDocumentos(int pIdPessoa, TipoDocumentoPessoa.TipoDocumento pTipoDocumento)
        {
            try
            {
                int _resultado = 0;
                int _tipodocto = (int)pTipoDocumento;

                var consulta = (from pessoadocpadrao in _context.tab_pessoa_documento_padrao
                                where (pessoadocpadrao.tab_pessoa.Id_pessoa == pIdPessoa)
                                && (pessoadocpadrao.tab_tipo_documento_pessoa.id_tipo_documento_pessoa == _tipodocto)
                                select pessoadocpadrao);

                _resultado = consulta.ToList().Count;

                return _resultado;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Salvar()
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    if (this._idDocumento == 0)
                    {
                        tab_pessoa_documento_padrao tabPessoaDocumentoPadrao = new tab_pessoa_documento_padrao();

                        tabPessoaDocumentoPadrao.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this._pessoa.IdPessoa);
                        tabPessoaDocumentoPadrao.tab_tipo_documento_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_documento_pessoa", "id_tipo_documento_pessoa", this._tipoDocumentoPessoa.IdTipoDocumentoPessoa);
                        tabPessoaDocumentoPadrao.path = this._path;

                        _context.AddTotab_pessoa_documento_padrao(tabPessoaDocumentoPadrao);
                        _context.SaveChanges();
                    }
                    else
                    {
                        tab_pessoa_documento_padrao tabPessoaDocumentoPadrao = (from pessoadocpadrao in _context.tab_pessoa_documento_padrao
                                                                                where pessoadocpadrao.id_documento == this._idDocumento
                                                                                select pessoadocpadrao).First();

                        tabPessoaDocumentoPadrao.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this._pessoa.IdPessoa);
                        tabPessoaDocumentoPadrao.tab_tipo_documento_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_documento_pessoa", "id_tipo_documento_pessoa", this._tipoDocumentoPessoa.IdTipoDocumentoPessoa);
                        tabPessoaDocumentoPadrao.path = this._path;

                        _context.SaveChanges();
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                scope.Complete();
            }
        }

        public void Excluir()
        {
            try
            {
                var consulta = from pessoadocpadrao in _context.tab_pessoa_documento_padrao
                               where pessoadocpadrao.id_documento == this._idDocumento
                               select pessoadocpadrao;

                var listConsulta = consulta.ToList();

                string _caminhodoc = "";
                foreach (var list in listConsulta)
                {
                    _caminhodoc = list.path;
                    _context.DeleteObject(list);
                    _context.SaveChanges();

                    System.IO.File.Delete(_caminhodoc);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
    }
}
